package edu.cque.jt.provider.controller.util;

import com.alibaba.csp.sentinel.adapter.spring.webmvc.callback.RequestOriginParser;
import org.springframework.stereotype.Component;

import javax.servlet.http.HttpServletRequest;

/**
 * @author Hua
 * @create 2022-07-26 12:25
 * <p>
 * 对流控应用值进行解析，检查服务访问时传入的值和RequestOriginParser的parseOrigin方法返回值是否相同。
 */
@Component
public class DefaultRequestOriginParser implements RequestOriginParser {

    @Override
    public String parseOrigin(HttpServletRequest request) {
        //定义请求解析器,用于对请求进行解析,并返回解析结果,sentinel底层在拦截到用户请求以后,会对请求数据基于此对象进行解析,判定是否符合黑白名单规则,
        //在授权规则里面,设置黑白名单的时候,对于所有请求路径里面,只对包含origin参数进行拦截,并判断origin参数的值是否是我们授权规则里面(流控应用)设置的黑白名单的值,
        // 并作出对应的处理结果.  重点注意:这里要获取的请求参数名 决定 发送请求时是否会拦截, 而授权访问(流控应用)设置的值,为请求参数名对应的值,用来判断拦截是否通过.
//        String origin = request.getParameter("origin");//这里的参数名会与请求中的参数名一致
        String id = request.getRemoteAddr();
        System.out.println("id = " + id);
//        System.out.println("origin = " + origin);
        return id;


    }
}
